#!/usr/bin/python3
# _*_ coding: utf-8 _*_
#
# Copyright (C) 2024 - 2024 heihieyouheihei, Inc. All Rights Reserved 
#
# @Time    : 2024/8/14 23:20
# @Author  : Yuyun
# @File    : 寻找最富裕家庭.py
# @IDE     : PyCharm


"""
题目描述：
在一棵树中，每个节点代表一个家庭成员，节点的数字表示其个人的财富值，一个节点及其直接相连的子节点被定义为一个小家庭。
现给你一棵树，请计算出最富裕的小家庭的财富和。

输入描述：
第一行为一个数N，表示成员总数，成员编号1-N，1<=N<=1000
第二行为N个空格分隔的数，表示编号1-N的成员的财富值。0<=财富值<=100000
接下来N-1行，每行两个空格分隔的整数（N1，N2），表示N1是N2的父节点Q。
输出描述：
最富裕的小家庭的财富和

示例1 输入：
4
100 200 300 500
1 2
1 3
2 4
输出： 700
说明：
成员1.2.3组成的小家庭财富值为600
成员2，4组成的小家庭财富值为700

示例2
输入：
4
100 200 300 500
1 2
1 3
1 4
输出： 1100
说明：
成员1，2，3，4组成的小家庭财富值为1100
"""

def find_tree_wealth(n, wealth, edges):
    #构建树结构
    tree = {i: [] for i in range(1, n + 1)}
    for n1, n2 in edges:
        tree[n1].append(n2)     #n1为n2的父节点
    max_wealth = 0
    #遍历每个节点，计算小家庭财富
    for node in range(1, n + 1):
        family_wealth = wealth[node - 1]        #当前节点财富
        for child in tree[node]:
            family_wealth += wealth[child - 1]      #子节点财富
        max_wealth = max(max_wealth, family_wealth)
    return max_wealth

n = int(input())
weath = list(map(int, input().split()))
edges = [tuple(map(int, input().split())) for _ in range(n - 1)]        #n-1表示树的边
print(find_tree_wealth(n, weath, edges))